﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Cocon90.Lib.Util
{
    public class ThreadInvoker
    {
        ThreadInvoker()
        {
            ths = new List<System.Threading.Thread>();
        }
        /// <summary>
        /// 创建新实例（自动创建一个池）
        /// </summary>
        /// <returns></returns>
        public static ThreadInvoker CreateInstence()
        {
            return new ThreadInvoker();
        }
        /// <summary>
        /// 使用多线程处理某事,第二参传入一个调用方法完毕后执行的委托，些委托会把线程池传出去。用于外部一一停止线程。如果不传第二参，则线程不停止。
        /// </summary>
        /// <param name="action"></param>
        public void Invoke(System.Threading.ThreadStart action, InvokeFinish invkeFinish)
        {
            System.Threading.Thread th = new System.Threading.Thread(() =>
            {
                action();
                if (invkeFinish != null)
                    invkeFinish(ths);
            });
            ths.Add(th);
            th.Start();
        }
        /// <summary>
        /// 模拟线程池
        /// </summary>
        List<System.Threading.Thread> ths;
        public delegate void InvokeFinish(List<System.Threading.Thread> threads);
    }
}
